import cv2
import numpy as np
from tkinter import Tk, Label, Button, Scale, HORIZONTAL, Frame
from PIL import Image, ImageTk


def scan_effect(image_path):
    # 读取原始图像
    #original = cv2.imread(r'C:\Users\40650\Downloads\20240929092554.png').astype(float)  # 转换为浮点数以避免乘法中的整数截断
    original = cv2.imread(r'C:\Users\40650\Desktop\20240929092554.png').astype(float)  # 转换为浮点数以避免乘法中的整数截断
    #todo 通过透视裁剪图片

    # 1. 复制图层并进行高斯模糊
    blurred = cv2.GaussianBlur(original, (151,151), 0).astype(float)
    # 2. 实现“划分”模式
    # 为了避免除以零的情况，可以添加一个小的常数（如1e-7）
    epsilon = 1e-7
    divided = original / (blurred + epsilon)
    # 将结果缩放到0-255范围并转换为8位无符号整数
    divided = np.clip(divided * 255, 0, 255).astype(np.uint8)
    merged = divided.astype(float)  # 转换为浮点数以避免操作中的整数截断


    # 3. 实现正片叠底模式
    # 正片叠底公式：result = (original * blurred) / 255
    multiply = (divided * merged) / 255
    # 将结果缩放到0-255范围并转换为8位无符号整数
    multiply = np.clip(multiply, 0, 255).astype(np.uint8)

    # 显示结果
    #cv2.imshow('Original', original.astype(np.uint8))
    #cv2.imshow('Blurred', blurred.astype(np.uint8))
    # cv2.imshow('Divided', divided)
    cv2.imshow('Multiply', multiply)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2.imwrite(r'C:\Users\40650\Desktop\20240929092554-1.png', multiply)



scan_effect('')